home *** CD-ROM | disk | FTP | other *** search
Wrap
GW-BASIC | 1984-11-25 | 5.6 KB | 157 lines
1 ' DIRUTIL.BAS Directory utility for RBBS-PC 2 ' Lists, Adds, and searches for files in RBBS-PC directories. 3 ' 4 ' 08/13/84 Will Carlton 5 ' 6 ' 11/10/84 ADDED DIRECTORY SORT WITH DELETE OPTION (TS) 7 ' 10 ON ERROR GOTO 910 20 DIM DIR$(128),SW%(20,2),NAM$(999) 30 KEY OFF:CLS 40 LOCATE 1,23:PRINT "RBBS-PC DIRECTORY MAINTENANCE UTILITY":PRINT 50 PRINT "What drive do the directory files reside on (A,B,C, or D) ? " 60 GOSUB 760:DRV$=I$ 70 DRV$=MID$(DRV$,1,1):IF INSTR("ABCDabcd",DRV$)=0 THEN 60 80 'FIL=0:CLS:FILES DRV$+":dir*.":FOR Y=2 TO 24:FOR X=1 TO 80 STEP 18:FIL$="":FOR Z=(X*18)+1 TO 18:F$=CHR$(SCREEN(Y,Z)):FIL$=FIL$+F$:NEXT Z:FIL=FIL+1:DIR$(FIL)=FIL$:NEXT X:NEXT Y 90 ' 100 ' Menu 105 ' 110 CLS:LOCATE 1,23:PRINT "RBBS-PC DIRECTORY MAINTENANCE UTILITY" 115 LOCATE 4,5:PRINT "1 - LIST DIRECTORY" 123 LOCATE 4,50:PRINT "5 - SORT W/ DELETE OPTION" 125 LOCATE 5,5:PRINT "2 - UPDATE DIRECTORY" 127 LOCATE 5,50:PRINT "6 - QUIT" 130 LOCATE 6,5:PRINT "3 - SEARCH FOR STRING IN A DIRECTORY" 135 LOCATE 7,5:PRINT "4 - CHANGE DRIVE" 140 GOSUB 710 145 LOCATE 9,25:PRINT "Enter your selection: " 150 GOSUB 760:SEL$=I$ 155 ON VAL(SEL$) GOTO 610,200,410,30,1000,810 160 GOTO 150 165 ' 200 'Update Directory 205 LOCATE 11,1:INPUT "WHAT DIRECTORY TO CREATE/UPDATE (PRESS <ENTER> TO QUIT) ";DIRECT$ 210 IF DIRECT$="" THEN 110 215 OPEN DRV$+":"+DIRECT$ FOR APPEND AS #1 220 GOSUB 990 225 LOCATE 12,1:INPUT "PROGRAM NAME (INCLUDE EXTENSION) ";PROGNAME$ 230 IF LEN(PROGNAME$)>12 OR INSTR(PROGNAME$," ") THEN PRINT CHR$(7);:GOTO 225 235 IF INSTR(PROGNAME$,".")=0 THEN PROGNAME$=PROGNAME$+"." 240 UPARS$=PROGNAME$:GOSUB 510:PROGNAME$=PARS$+" ":PROG$=MID$(PROGNAME$,1,INSTR(PROGNAME$,".")-1):EXTEN$=MID$(PROGNAME$,INSTR(PROGNAME$,".")+1,3) 245 IF LEN(EXTEN$)>3 OR LEN(PROG$)>8 THEN PRINT CHR$(7):GOTO 225 250 INPUT "PROGRAM SIZE ";SIZE$ 255 IF LEN(SIZE$)>9 THEN PRINT CHR$(7):GOTO 250 260 SIZE=VAL(SIZE$) 265 INPUT "ENTER DATE IN THE FORM (MM/DD/YY) (C/R FOR TODAY) ";CREATE$ 270 IF CREATE$="" THEN CREATE$=MID$(DATE$,1,6)+MID$(DATE$,9,2) 275 IF LEN(CREATE$)<>8 THEN PRINT CHR$(7):GOTO 265 280 PRINT "ENTER 40 (32) CHARACTER DESCRIPTION OF ";PROGNAME$ 285 LOCATE 16,1:PRINT " 1---+---1+0---+---2+0---+---3+0--*+---4+0" 290 INPUT DESCRIP$ 295 IF LEN(DESCRIP$)>40 THEN PRINT CHR$(7):GOTO 285 300 PRINT#1,USING"\ \ \ \ ######### \ \ ";PROG$;EXTEN$;SIZE;CREATE$;:PRINT#1,DESCRIP$ 305 PRINT "MORE (Y/N) " 310 MORE$=INKEY$ 315 IF MORE$="Y" OR MORE$="y" THEN 220 ELSE IF MORE$="N" OR MORE$="n" THEN CLOSE:GOTO 110 320 GOTO 310 400 ' 410 'Search routine 415 IF NOT OKFIL THEN LOCATE 11,1:COLOR 15:PRINT "No directories found! Change diskette or drive specification. ";:COLOR 7:BEEP:PRINT "Press any key.":GOSUB 990:GOSUB 750:GOTO 100 420 GOSUB 990 430 LOCATE 11,1:INPUT "Enter the directory to search in ";DIRECT$:IF DIRECT$="" THEN 110 440 LOCATE 12,1:INPUT "Enter the string to search for ";SRCH$:IF SRCH$="" THEN 110 ELSE UPARS$=SRCH$:GOSUB 510:SRCH$=PARS$ 450 CLOSE #1:OPEN DRV$+":"+DIRECT$ FOR INPUT AS #1 460 CLS:LINE INPUT #1,L$:PRINT L$:PRINT:PRINT "Control <K> to quit listing":PRINT 470 IF EOF(1) THEN 675 ELSE LINE INPUT #1,L$:UPARS$=L$:GOSUB 510:IF INSTR(PARS$,SRCH$)<> 0 THEN PRINT L$ 480 STP$=INKEY$:IF STP$="" THEN 470 ELSE IF STP$=CHR$(11) THEN PRINT:PRINT "Listing aborted.":GOTO 675 490 STRT$=INKEY$:IF STRT$="" THEN 490 ELSE GOTO 470 500 ' 510 'Parsing routine 520 PARS$="":FOR I=1 TO LEN(UPARS$):P$=MID$(UPARS$,I,1) 530 IF ASC(P$)>96 THEN P$=CHR$(ASC(P$)-32) 540 PARS$=PARS$+P$:NEXT:RETURN 550 ' 600 'List directory 610 LOCATE 12,1:INPUT "WHAT DIRECTORY TO LIST (PRESS <ENTER> TO QUIT) ";DIRECT$ 620 IF DIRECT$="" THEN 110 630 CLOSE #1:OPEN DRV$+":"+DIRECT$ FOR INPUT AS #1 640 CLS:ON EOF(1) GOTO 675:LINE INPUT #1,L$:PRINT L$:PRINT:PRINT "Control <K> to quit listing.":PRINT 650 WHILE NOT EOF(1) 655 LINE INPUT #1,L$:PRINT L$ 660 STP$=INKEY$:IF STP$="" THEN 650 ELSE IF STP$=CHR$(11) THEN PRINT "Listing aborted.":GOTO 675 665 STRT$=INKEY$:IF STRT$="" THEN 665 ELSE GOTO 650 670 WEND 675 CLOSE #1:PRINT:PRINT "End of File. Press any key....":GOSUB 760:GOTO 110 685 ' 695 END 700 'Show DIR files 710 OKFIL=-1:LOCATE 13,1:FILES DRV$+":dir*.":LOCATE 9,1:RETURN 750 ' Get a key routine 760 I$=INKEY$:IF I$="" THEN 760 ELSE RETURN 800 ' End of program 810 SOUND 250,3:CLOSE:CLS:SOUND 500,7:LOCATE 12,20:COLOR 13:SOUND 400,5:PRINT "H A V E A N I C E D A Y !":FOR I=1 TO 999:NEXT:END 900 ' ERROR HANDLING 910 IF ERR=53 AND ERL=215 THEN COLOR 15:BEEP:LOCATE 12,50:PRINT "File not found. Will create it":LOCATE 13,1:OPEN DIRECT$ FOR OUTPUT AS #1:RESUME 225 920 IF ERR=53 AND ERL=630 THEN COLOR 15:BEEP:LOCATE 12,62:PRINT "File not found!":BEEP:COLOR 7:RESUME 610 925 IF ERR=53 AND ERL=450 THEN COLOR 15:BEEP:LOCATE 12,62:PRINT "File not found!":BEEP:COLOR 7:RESUME 675 930 IF ERR=53 AND ERL=710 THEN OKFIL=0:PRINT "No files found!":BEEP:COLOR 7:RESUME NEXT 940 IF ERR=53 AND ERL=80 THEN OKFIL=0:PRINT "No files found!":BEEP:COLOR 7:RESUME 110 945 IF ERR=53 AND ERL=1383 THEN RESUME 1390 950 LOCATE 25,1:COLOR 15:PRINT "Error ";ERR;" occurred in line ";ERL:COLOR 7:BEEP 960 END 970 FOR I=1 TO 128:PRINT DIR$(I);:NEXT 990 FOR I=12 TO 23:LOCATE I,1:PRINT SPACE$(79):NEXT:RETURN 1000 LOCATE 11,1:INPUT"Sort which directory (CR to QUIT) ";DIRECT$ 1010 IF DIRECT$="" THEN 110 1020 CLOSE #1:OPEN DRV$+":"+DIRECT$ FOR INPUT AS #1 1030 OPEN DRV$+":TMP" FOR APPEND AS #2 1040 CNT%=0:LINE INPUT #1,L$:PRINT #2,L$ 1041 LOCATE 12,1:PRINT"Do you wish to mark entries for DELETION "; 1043 GOSUB 760:A$=LEFT$(I$,1):IF (A$="Y") OR (A$="y") THEN 1500 1050 WHILE NOT EOF(1) 1060 LINE INPUT #1,L$:CNT%=CNT%+1 1070 NAM$(CNT%)=LEFT$(L$,8) 1080 WEND 1090 P%=1:SW%(P%,1)=1:SW%(P%,2)=CNT% 1095 LOCATE 22,1:PRINT"Sorting .."; 1100 IF P%<0 THEN 1320 1110 I1%=SW%(P%,1):J1%=SW%(P%,2) 1120 P%=P%-1 1130 GOSUB 1140:GOTO 1100 1140 PRINT"."; 1150 IF J1%<=I1% THEN 1310 1160 I%=I1%:J%=J1% 1170 SAMP%=-1 1180 IF I%>=J% THEN 1280 1190 IF NAM$(I%)<=NAM$(J%) THEN 1240 1210 SWAP NAM$(I%),NAM$(J%) 1230 SAMP%=-SAMP% 1240 IF SAMP%<0 THEN 1260 1250 J%=J%-1:GOTO 1270 1260 I%=I%+1 1270 GOTO 1180 1280 IF (I%+1)>=J1% THEN 1300 1290 P%=P%+1:SW%(P%,1)=I%+1:SW%(P%,2)=J1% 1300 J1%=I%-1:GOTO 1150 1310 RETURN 1320 ' *END OF SORT* 1325 CLOSE #1:LOCATE 24,1:PRINT"Writing .."; 1330 FOR I%=1 TO CNT% 1335 OPEN DRV$+":"+DIRECT$ FOR INPUT AS #1 1340 WHILE NOT EOF(1) 1350 LINE INPUT #1,L$ 1360 IF LEFT$(L$,8)=NAM$(I%) THEN PRINT #2,L$:GOTO 1380 1370 WEND:PRINT CHR$(7):PRINT"***error***":CLOSE:END 1380 CLOSE #1:NEXT I%:CLOSE 1383 KILL DRV$+":"+DIRECT$+".BAK" 1390 NAME DRV$+":"+DIRECT$ AS DRV$+":"+DIRECT$+".BAK" 1400 NAME DRV$+":TMP" AS DRV$+":"+DIRECT$ 1410 CLOSE:GOTO 110 1500 ' *DELETE ENTRIES ROUTINE* 1505 CLS:LOCATE 1,29:PRINT"DELETE ENTRIES OPTION":LOCATE 3,37:PRINT DIRECT$ 1507 LOCATE 16,1:PRINT"DELETE (Y=yes, CR=no) " 1510 WHILE NOT EOF(1) 1520 LINE INPUT #1,L$:LOCATE 12,1:PRINT SPACE$(76) 1530 LOCATE 12,1:PRINT L$:LOCATE 16,26 1540 GOSUB 760:IF (I$="Y") OR ( GRAF .DOC NEWKEY2 .LBR NHELP .DQC IRR .WKS<UNK! {000D}><UNK! {000A}>FILECOMP.BAS SKETCH .BAS ARTILERY.BAS MINEFELD.BAS SPEEDKEY.DOC